# -*- coding: utf-8 -*-

"""
    BeautifulSoup4
    将复杂HTML文档转换成一个复杂的树形结构，每个节点都是Python对象，所有对象可以归纳为4中：
    - tag：标签及其内容，默认值获取第一个对应内容
    - NavigableString：标签里的内容(字符串)
    - BeautifulSoup：表示整个文档
    - Comment：是一个特殊的 NavigableString ，但是输出的内容不包含注释信息
"""

from bs4 import BeautifulSoup
import re


file = open("./baidu.html", "rb")
html = file.read().decode("utf-8")
bs = BeautifulSoup(html, "lxml")
file.close()
# print(bs.title)
# print(bs.title.string)
# print(bs.a)
# print(bs.head)
# print(type(bs.head))
# print(bs.a.attrs)
# print(bs.name)
# print(bs.a)
# print(bs.a.string)


# ----------------------------------------------- 文档遍历 ----------------------------------------------- #
# print(bs.head.contents)
# print(bs.head.contents[1])


# ----------------------------------------------- 文档搜索 ----------------------------------------------- #
"""
    1. find_all()：字符串过滤，会查找与字符串完全匹配的内容
    2. search()：使用正则表达式来匹配内容
"""

# t_list = bs.find_all("a")
# t_list = bs.find_all(re.compile("a"))


# 1.1. 传入一个函数，根据函数要求来搜索(了解)
# def name_is_exists(tag):
#     return tag.has_attr("name")
# t_list = bs.find_all(name_is_exists)
# for i in t_list:
#     print(i)

# 1.2. kwargs 参数
# t_list = bs.find_all(id="head")
# t_list = bs.find_all(href="http://news.baidu.com")
# t_list = bs.find_all(class_=True)
# for i in t_list:
#     print(i)

# 1.3. text 参数
# t_list = bs.find_all(text="hao123")
# t_list = bs.find_all(text=["hao123", "地图", "贴吧"])
# t_list = bs.find_all(text=re.compile("\w"))
# for i in t_list:
#     print(i)

# 1.4. limit 参数
# t_list = bs.find_all("a", limit=3)
#
# for i in t_list:
#     print(i)

# 1.5. css选择器
# t_list = bs.select("title")  # 通过标签查找
# t_list = bs.select(".mnav")  # 通过类名查找
# t_list = bs.select("#u1")  # 通过id查找
# t_list = bs.select("a[class='bri']")  # 通过属性查找
# t_list = bs.select("a[name='tj_tbriicon']")  # 通过属性查找
# t_list = bs.select("head > title")  # 通过子标签查找
# t_list = bs.select(".mnav ~ .bri")  # 通过兄弟标签查找
# print(t_list[0].get_text())
# for i in t_list:
#     print(i)





